//defino la variable para que este accesible desde todos lados (como una global)
var timer;

/**
 * Permite manipular una serie de checks dentro de un contenedor
 * @param string accion indica la acciona realizar: seleccionar (selecicona todos los checks)
 *													deseleccionar (deseleccionar todos los checks)
 *													invertir (al check que esta seleccionado lo deselecciona y biceversa)
 * @param string contenedor indica el id del contenedor donde se encuentran los checks
 * @return boolean true si encuentra el contenedor, false si no lo encuentra
 */
function accionesChecks( accion, contenedor ) {
	var divContenedor;
	var inputs;

	divContenedor = document.getElementById(contenedor);

	if(divContenedor != null)
	{
		inputs = divContenedor.getElementsByTagName('input');

		for ( var i = 0; i < inputs.length; i++ ) {
			if ( inputs[i].type == 'checkbox' ) {
				if (accion == 'seleccionar')
				{
					inputs[i].checked = true;
				}
				else if (accion == 'deseleccionar')
				{
					inputs[i].checked = false;
				}
				else if (accion == 'invertir')
				{
					inputs[i].checked = !inputs[i].checked;
				}		
			}
		}
    return true;
	}
	else
	{
		return false;
	}
}


//id del div a ocultar
//si forzar es true, no importa el estado anterior, siempre lo muestra, false siempre lo oculta
function mostrarOcultarDiv( id, forzar ) {
	var elDiv = document.getElementById(id);
	if(elDiv != null) {
		if(forzar == true)
		{
			elDiv.style.visibility = 'visible';
			elDiv.style.display = 'inline';
		}
		else if(forzar == false)
		{
			elDiv.style.visibility = 'hidden';
			elDiv.style.display = 'none';
		}
		else
		{
			if (elDiv.style.visibility == 'visible' || elDiv.style.visibility == '')
			{
				elDiv.style.visibility = 'hidden';
				elDiv.style.display = 'none';
			}
			else
			{
				elDiv.style.visibility = 'visible';
				elDiv.style.display = 'inline';
			}
		}
	}
}

function mostrarOcultarDivYTr( id_div, id_tr ) {
	var elDiv = document.getElementById(id_div);
	var elTr = document.getElementById(id_tr);
	if (elDiv.style.visibility == 'visible')
	{
		elDiv.style.visibility = 'hidden';
		elDiv.style.display = 'none';
		elTr.style.visibility = 'hidden';
		elTr.style.display = 'none';
	}
	else
	{
		elDiv.style.visibility = 'visible';
		elDiv.style.display = 'inline';
		elTr.style.visibility = 'visible';
		var isMSIE = /*@cc_on!@*/false; //detecto si es MSIE
		if(isMSIE)
		{ 
			elTr.style.display = 'block'; //solo para explorer
		}
		else
		{
			elTr.style.display = 'table-row'; //gecko
		}
	}
}
/*
Muestra el div de los errores. Establece un tiempo para que se oculte solo.
*/
function mostrarErrores( mensaje )
{
	if (mensaje == null)
	{
		mensaje = 'Error';
	}
    var divErrores = document.getElementById('errores');
	divErrores.innerHTML = '<img src=\'../img/12x12/error.gif\' />' + mensaje;
	divErrores.style.visibility = 'visible';
	timer = setInterval('ocultarErrores()',5000);
}

/*
Oculta el div de los errores. Resetea tiempo para que se oculte solo.
*/
function ocultarErrores()
{
    var divErrores = document.getElementById('errores');
	divErrores.style.visibility = 'hidden';
	clearInterval(timer);
}

/**
 * Permite el ingreso solo de numeros (y las teclas de control) a los inputs
 * @param object campo que deseo se controle su ingreso
 * @param string evento el evento que disparo el llamado de la funcion
 * @param boolean indica si permite el ingreso de valores decimal. Por defecto solo enteros
 * @return boolean true si el caracter ingresado es numero o false en caso de no serlo
 * @example onKeyPress = 'return soloNumeros(this, event, true);'
 */

function soloNumeros(campo, evento, decimal)
{
	if(decimal == null)
		decimal = false;

	var key;
	var keychar;

	if (window.event)
	   key = window.event.keyCode;
	else if (evento)
	   key = evento.which;
	else
	   return true;
	keychar = String.fromCharCode(key);

	// teclas de control 
	if ((key==null) || (key==0) || (key==8) || 
		(key==9) || (key==13) || (key==27) )
	   return true;

	// numeros
	else if ((("0123456789").indexOf(keychar) > -1))
	   return true;

	// decimal
	else if (decimal && (keychar == "."))
	   {
	   return true;
	   }
	else
	{
	   return false;
	}
}

/**
 * Limpia el texto que hubiere dentro de los imput text (cajas de texto) 
 * y selecciona el primer elemento de los selects (combos)
 * @param string contenedor id del div que actua como contenedor de los elementos
 * @return boolean true si encuentra el contenedor, false si no lo encuentra
 */

function limpiarBusqueda( contenedor ) {
	var divContenedor;
	var objetos;
	var i;

    divContenedor = document.getElementById( contenedor );
	if (divContenedor != null)
	{
		//busco los inputs
		objetos = divContenedor.getElementsByTagName('input');
		if (objetos != null)
		{
			for ( i = 0; i < objetos.length; i++ ) 
			{
				if (objetos[i].type=='text')
				{
					objetos[i].value = "";
				}
			}
		}

		//busco los selects
		objetos = divContenedor.getElementsByTagName('select');
		if (objetos != null)
		{
			for ( i = 0; i < objetos.length; i++ ) 
			{
				objetos[i].options[0].selected = true;
			}
		}
		return true;
	}
	else
	{
		return false;
	}
}

/**
 * Al hacer click sobre el boton aceptar oculta el div del session flash
 * @return boolean true si encuentra el contenedor (session_flash), false si no lo encuentra
 */
function ocultarSessionFlash(){
	var ElDivDelFlash = document.getElementById('session_flash');
	if (ElDivDelFlash)
	{
		ElDivDelFlash.style.display='none';
		ElDivDelFlash.parentNode.removeChild(ElDivDelFlash);
		return true;
	}
	else
		return false;
}

/**
 * Cambia la clase css de un elemento
 * @param string id id del elemento due�o de la clase
 * @param string clase nombre de la nueva clase a asignar al elemento
 * @return boolean true si encuentra el contenedor, false si no lo encuentra
 */
function cambiarClase(id, clase){
	var elemento = document.getElementById(id);
	if (elemento)
	{
		elemento.className = clase;
		return true;
	}
	else
		return false;
}

/**
 * Intercambia entre dos clases css, dada una clase cambia por la otra y viceversa 
 * @param string id id del elemento due�o de la clase
 * @param string claseA nombre de la clase de origen
 * @param string claseB nombre de la clase de destino
 * @return boolean true si encuentra el contenedor, false si no lo encuentra
 */
function intercambiaClase(id, claseA, claseB){
	var elemento = document.getElementById(id);
	if (elemento)
	{
		if(elemento.className == claseA)
			elemento.className = claseB;
		else if(elemento.className == claseB)
			elemento.className = claseA;

		return true;
	}
	else
		return false;
}